// 假设按照升序排序的数组在预先未知的某个点上进行了旋转。

// ( 例如，数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

// 请找出其中最小的元素。

// 注意数组中可能存在重复的元素。


int findMin(int* nums, int numsSize){
    int l = 0, r = numsSize-1;
    while (l < r) {
        int m = l + (r - l) / 2;
        // 相比上一题，难点在于nums[m] == nums[r]时, 无法直接看出最小值在哪一半
        // 如[1,1,1,0,1], nums[m] = nums[r] = 1, 无法判断最小值是在[l, m]还是[m+1, r]
        if (nums[m] == nums[r]) r = r - 1;
        else if (nums[m] < nums[r]) r = m;
        else l = m + 1;
    }
    return nums[l];
}